﻿namespace User.Api.Helpers.WeixinPayV3.WxResult
{
    public class ParsePayNotifyResult
    {
        /// <summary>
        /// 成功时为0，其它为失败
        /// </summary>
        public string ResultCode { get; set; }

        /// <summary>
        /// 失败时的信息
        /// </summary>
        public string ResultMsg { get; set; }
        /// <summary>
        /// 成功回复字符串
        /// </summary>
        public string SuccessResponse { get; set; }
        /// <summary>
        /// 失败回复字符串
        /// </summary>
        public string FailResponse { get; set; }

        /// <summary>
        /// 订单相关信息
        /// </summary>
        public OrderInfo PayOrder { get; set; }

        /// <summary>
        /// 用户相关信息
        /// </summary>
        public UserInfo PayUser { get; set; }

        public class OrderInfo
        {
            /// <summary>
            /// 签名方式
            /// 签名类型，取值：MD5、RSA，默认：MD5
            /// </summary>
            public string SignType { get; set; }

            /// <summary>
            /// 接口版本
            /// 版本号，默讣为 1.0
            /// </summary>
            public string ServiceVersion { get; set; }

            /// <summary>
            /// 字符集
            /// 字符编码,取值：GBK、UTF-8，默认：GBK
            /// </summary>
            public string InputCharset { get; set; }

            /// <summary>
            /// 签名
            /// </summary>
            public string Sign { get; set; }

            /// <summary>
            /// 密钥序号
            /// 多密钥支持的密钥序号，默认 1
            /// </summary>
            public string SignKeyIndex { get; set; }

            /// <summary>
            /// 交易模式
            /// 1-即时到账 , 其他保留
            /// </summary>
            public string TradeMode { get; set; }

            /// <summary>
            /// 交易状态
            /// 支付结果：0—成功 其他保留
            /// </summary>
            public string TradeState { get; set; }

            /// <summary>
            /// 支付结果信息
            /// 支付结果信息，支付成功时为空
            /// </summary>
            public string PayInfo { get; set; }

            /// <summary>
            /// 商户号
            /// 商户号，也即之前步骤的 partnerid,由微信统一分配的 10 位正整数(120XXXXXXX)号
            /// </summary>
            public string Partner { get; set; }

            /// <summary>
            /// 付款银行
            /// 银行类型，在微信中使用 WX
            /// </summary>
            public string BankType { get; set; }

            /// <summary>
            /// 银行订单号
            /// </summary>
            public string BankBillNo { get; set; }

            /// <summary>
            /// 总金额
            /// 支付金额，单位为分，如果 discount有值，通知的 total_fee + discount = 请求的 total_fee
            /// </summary>
            public string TotalFee { get; set; }

            /// <summary>
            /// 币种
            /// 现金支付币种, 目前只支持人民币,默认值是 1-人民币
            /// </summary>
            public string FeeType { get; set; }

            /// <summary>
            /// 通知 ID 
            /// 支付结果通知 id，对于某些特定商户，只返回通知 id，要求商户据此查询交易结果
            /// </summary>
            public string NotifyId { get; set; }

            /// <summary>
            /// 订单号
            /// 交易号， 28 位长的数值，其中前 10位为商户号，之后 8 位为订单产生的日期，如 20090415，最后 10 位是流水号。
            /// </summary>
            public string TransactionId { get; set; }

            /// <summary>
            /// 商户订单号
            /// 商户系统的订单号，不请求一致
            /// </summary>
            public string OutTradeNo { get; set; }

            /// <summary>
            /// 商户数据包
            /// 商户数据包，原样返回
            /// </summary>
            public string Attach { get; set; }

            /// <summary>
            /// 支付完成时间
            /// 支付完成时间，格式为yyyyMMddhhmmss，如 2009 年 12月 27 日 9 点 10 分 10 秒表示为20091227091010。时区为 GMT+8 beijing
            /// </summary>
            public string TimeEnd { get; set; }

            /// <summary>
            /// 物流费用
            /// 物流费用，单位分，默认 0。如果有值，必须保证 transport_fee  +  product_fee = total_fee
            /// </summary>
            public string TransportFee { get; set; }

            /// <summary>
            /// 物品费用
            /// 物品费用，单位分。如果有值，必须保证 transport_fee  +  product_fee = total_fee
            /// </summary>
            public string ProductFee { get; set; }

            /// <summary>
            /// 折扣价格
            /// 折扣价格，单位分，如果有值，通知的 total_fee  +  discount  =  请求的total_fee
            /// </summary>
            public string Discount { get; set; }

            /// <summary>
            /// 买家别名
            /// 对应买家账号的一个加密串
            /// </summary>
            public string BuyerAlias { get; set; }
        }

        public class UserInfo
        {
            /// <summary>
            /// 字段名称：公众号 id；字段来源：商户注册具有支付权限的公众号成功后即可获得；传入方式：由商户直接传入
            /// </summary>
            public string AppId { get; set; }

            /// <summary>
            /// 字段名称：时间戳；字段来源：商户生成从 1970 年 1 月 1 日 00： 00：00 至今的秒数，即当前的时间；由商户生成后传入。取值范围：32字符以下
            /// </summary>
            public string TimeStamp { get; set; }

            /// <summary>
            /// 字段名称：随机字符串；字段来源：商户生成的随机字符串；取值范围：长度为 32 个字符以下。由商户生成后传入。取值范围：32 字符以下
            /// </summary>
            public string NonceStr { get; set; }

            /// <summary>
            /// 支付该笔订单的用户 ID，商户可通过公众号其他接口为付款用户服务
            /// </summary>
            public string OpenId { get; set; }

            /// <summary>
            /// 字段名称：签名；字段来源：对前面的其他字段不 appKey 按照字典序排序后，使用 SHA1 算法得到的结果。由商户生成后传入
            /// </summary>
            public string AppSignature { get; set; }

            /// <summary>
            /// 用户是否关注了公众号。1 为关注，0 为未关注
            /// </summary>
            public string IsSubscribe { get; set; }

            /// <summary>
            /// 签名方式
            /// </summary>
            public string SignMethod { get; set; }
        }
    }
}